CRUD Operation using Asp.Net Web API and Entity Framework in Asp.Net MVC 4
Today In this article, I’m explaining the asp.net WebApi – how to create and consume with CRUD operation (Create, Read, Update, Delete) using Entity Framework in Asp.Net MVC 4.
Step 1 -
First, create a table named “Customer” in the database like this:
Step 2
Now create a basic asp.net MVC 4 application and add a class named “Customer” like this:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace MvcWebApi.Models
{
[Table("Customer")]
public class Customer
{
[Key]
public int CustID { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string ContactNo { get; set; }
}
}
Step 2
Now add another class named “CustomerContext” like this:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace MvcWebApi.Models
{
public class CustomerContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
}
}
Step 3
Now add a controller named “ValuesController” to the project like this:
using MvcWebApi.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
namespace MvcWebApi.Controllers
{
public class ValuesController : ApiController
{
CustomerContext db = new CustomerContext();
public IEnumerable<Customer> Get()
{
return db.Customers.ToList();
}
// GET api/values/5
public Customer Get(int id)
{
return db.Customers.Find(id);
//return "value";
}
// POST api/values
public void Post(List<string> val {
try
{
Customer obj = new Customer();
obj.Name = val[0];
obj.Address = val[1];
obj.ContactNo = val[2];
db.Customers.Add(obj);
db.SaveChanges();
}
catch (Exception) { }
}
// PUT api/values/5
public void Put(int id, Customer obj)
{
try
{
db.Entry(obj).State = System.Data.EntityState.Modified;
db.SaveChanges();
}
catch (Exception) { }
}
//This method for update through Json
public void Put(List<string> val)
{
try
{
int id = Convert.ToInt32(val[3]);
Customer obj = db.Customers.Find(id);
obj.Name = val[0];
obj.Address = val[1];
obj.ContactNo = val[2];
db.Customers.Add(obj);
db.Entry(obj).State = System.Data.EntityState.Modified;
db.SaveChanges();
}
catch (Exception) { }
}
// DELETE api/values/5
public void Delete(int id)
{
Customer obj = db.Customers.Find(id);
db.Customers.Remove(obj);
db.SaveChanges();
}
}
}
Changed its base class from the controller to ApiController using the namespace System.Web.Http,
Get() Method – This method will give the list of records.
Get(int id) Method – This method will give the specific record using the id.
Post() Method – This method will add a new record.
Put() Method – This method will edit a specific record using the id.
Delete() Method – This method will delete a record using the id.
Step 4
Now add another controller named “HomeController” like this:
This will create the controller with 5 views (Create, Delete, Details, Edit, Index) Change the code of the controller like below:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcWebApi.Models;
namespace MvcWebApi.Controllers
{
public class HomeController : Controller
{
ValuesController db = new ValuesController();
public ActionResult Index()
{
return View(db.Get());
}
//
// GET: /Home/Details/5
public ActionResult Details(int id = 0)
{
Customer customer = db.Get(id);
if (customer == null)
{
return HttpNotFound();
}
return View(customer);
}
//
// GET: /Home/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Home/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Customer customer)
{
if (ModelState.IsValid)
{
List<string> customerList = new List<string>();
customerList.Add(customer.Name);
customerList.Add(customer.Address);
customerList.Add(customer.ContactNo);
db.Post(customerList);
return RedirectToAction("Index");
}
return View(customer);
}
//
// GET: /Home/Edit/5
public ActionResult Edit(int id = 0)
{
Customer customer = db.Get(id);
if (customer == null)
{
return HttpNotFound();
}
return View(customer);
}
//
// POST: /Home/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(int id, Customer customer)
{
if (ModelState.IsValid)
{
db.Put(id, customer);
return RedirectToAction("Index");
}
return View(customer);
}
//
// GET: /Home/Delete/5
public ActionResult Delete(int id = 0)
{
Customer customer = db.Get(id);
if (customer == null)
{
return HttpNotFound();
}
return View(customer);
}
//
// POST: /Home/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
db.Delete(id);
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
Step 5
Now add the connection string in the web.config file:
<connectionStrings>
<add name="CustomerContext" connectionString="Data Source=Uttam-PC4;Initial Catalog=SumitTesting;user id = userid;password=password;" providerName="System.Data.SqlClient"/>
</connectionStrings>
Now your solution explorer will look like this:
Output
Now run the application:
Click on Create New – to add a new record:
Now click on edit – to edit a record:
Now click on details – to show the record details:
Now click on delete – to delete a record:
prasanth sounder
27-Aug-2018Int and datetime values are asking for conversion in both controllers and one is accepting like this obj.Percentage = Convert.ToInt32(val[1]); in values controller, but in home controller(mine is project_listing) it is showing erroer if i try like this Project_ListingsList.Add(Project_listings.(Convert.ToInt32(Percentage));
Dhaval Sanghvi
12-Oct-2016